Skip to content

feat(events): promote permission/request, permission/denied, stop/failure families (#258 v2 s3) - #358

Merged
ScriptedAlchemy merged 1 commit into
mainfrom
feat/258-events-s2
Sep 3, 2026
Merged

feat(events): promote permission/request, permission/denied, stop/failure families (#258 v2 s3)#358
ScriptedAlchemy merged 1 commit into
mainfrom
feat/258-events-s2

Conversation

@ScriptedAlchemy

Copy link
Copy Markdown
Owner

Summary

  • permission/request: Claude + Codex supported via the pinned PermissionRequest contract — allow/deny decisions project as hookSpecificOutput.decision.behavior (deny requires a reason → message); reserved input-rewrite fails closed; no additional-context channel. Codex wire schemas byte-pinned from rust-v0.147.0 with recorded digests.
  • permission/denied: Claude observation-only (retry signalling deliberately unprojected until a canonical vocabulary exists — recorded in the projection error); Codex/Cursor dated unavailable (no schema/native event).
  • stop/failure: Claude observation-only; others dated unavailable.
  • Envelope validation per family, starter fixtures for lifecycle replay, capability rows on all four tables (incl. portable), README matrix rows, capability-hash re-pins, changeset.

Test plan

  • envelope + projection suites incl. fail-closed negatives (route-unit pool green)
  • adapter metadata/capability/hooks/lifecycle-replay suites (only failure = pre-existing worktree-env workspace/open starter, reproduced on clean main)
  • typecheck + lint

@ScriptedAlchemy
ScriptedAlchemy merged commit 8c541ad into main Sep 3, 2026
@changeset-bot

changeset-bot Bot commented Sep 3, 2026

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: 0109c54

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 1 package
Name Type
agent-bundle Patch

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Sep 3, 2026

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review Completed 2026-09-03T03:11:17.887323Z 0109c54 PR opened
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 0109c548e1

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment on lines +224 to +226
if (typeof native.tool_input !== 'object' || native.tool_input === null || Array.isArray(native.tool_input)) {
return nativeEventError('native tool_input must be an object');
}

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Accept every tool_input shape allowed by the Codex schema

For Codex PermissionRequest events whose tool_input is a scalar, array, or null, this rejects the request before the route runs, even though the newly pinned permission-request.command.input.schema.json explicitly declares "tool_input": true and therefore permits any JSON value. The generated wrapper should follow that contract (or validate per target) rather than imposing the Claude-style object restriction.

Useful? React with 👍 / 👎.

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed on main in #364 (merge 305161a).

Comment on lines +30 to +31
"permission/denied": { "nativeEvent": "PermissionDenied", "state": "supported" },
"permission/request": { "nativeEvent": "PermissionRequest", "state": "supported" },

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Bump adapter revisions for the promoted event contracts

When an artifact produced before this change is validated after upgrading, Claude, Codex, and the unified plugin still expose their previous adapterRevision values despite now mapping and generating additional event-route contracts. matchesTargetMetadata uses that revision together with the unchanged observed version/schema metadata as its compatibility check, so the old artifact can be accepted as matching the newly registered adapter contract; bump the affected direct and unified adapter revisions as was done for the preceding event-family promotion.

Useful? React with 👍 / 👎.

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed on main in #364 (merge 305161a).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant